Form-Based Authentication কি এবং এর প্রয়োগ

Java Technologies - স্প্রিং সিকিউরিটি (Spring Security) - Spring Security এর Form-Based Authentication
183

Form-Based Authentication হল Spring Security-তে একটি অথেন্টিকেশন পদ্ধতি যেখানে ব্যবহারকারী তাদের পরিচয় (ইউজারনেম এবং পাসওয়ার্ড) একটি কাস্টম HTML ফর্মের মাধ্যমে প্রদান করে। এটি ডিফল্ট HTTP Basic Authentication-এর চেয়ে বেশি ব্যবহারকারী-বান্ধব এবং নিরাপত্তা এবং কাস্টমাইজেশনের সুযোগ প্রদান করে।


Form-Based Authentication-এর বৈশিষ্ট্য

  1. Custom Login Form: ব্যবহারকারী নিজের লগইন পৃষ্ঠা তৈরি করতে পারে।
  2. Session Management: অথেন্টিকেশন সফল হলে ব্যবহারকারী সেশনে ধরে রাখা হয়।
  3. Redirection: সঠিক অথেন্টিকেশনের পরে ব্যবহারকারীকে নির্দিষ্ট পৃষ্ঠায় পুনঃনির্দেশিত করা যায়।
  4. Remember Me: লগইন স্টেট ধরে রাখা যায়।

Spring Security-তে Form-Based Authentication প্রয়োগ

ধাপ ১: Maven ডিপেনডেন্সি যোগ করুন

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

ধাপ ২: Spring Security কনফিগারেশন তৈরি করুন

Spring Security-তে Form-Based Authentication সেটআপ করার জন্য SecurityFilterChain ব্যবহার করা হয়।

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;

@Configuration
public class SecurityConfig {

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests(auth -> auth
                .requestMatchers("/login", "/resources/**").permitAll() // Public URLs
                .anyRequest().authenticated() // Other URLs require authentication
            )
            .formLogin(form -> form
                .loginPage("/login") // Custom login page URL
                .defaultSuccessUrl("/home", true) // Redirect after successful login
                .failureUrl("/login?error=true") // Redirect on login failure
                .permitAll()
            )
            .logout(logout -> logout
                .logoutUrl("/logout")
                .logoutSuccessUrl("/login?logout=true")
                .permitAll()
            );
        return http.build();
    }
}

ধাপ ৩: ইন-মেমরি ইউজার ডেটা যোগ করুন

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;

@Configuration
public class InMemoryUserConfig {

    @Bean
    public InMemoryUserDetailsManager userDetailsManager() {
        UserDetails user = User.withDefaultPasswordEncoder()
            .username("user")
            .password("password")
            .roles("USER")
            .build();

        UserDetails admin = User.withDefaultPasswordEncoder()
            .username("admin")
            .password("admin")
            .roles("ADMIN")
            .build();

        return new InMemoryUserDetailsManager(user, admin);
    }
}

ধাপ ৪: Custom Login পৃষ্ঠা তৈরি করুন

src/main/resources/templates/login.html ফাইল তৈরি করুন।

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Login</title>
</head>
<body>
    <h1>Login</h1>
    <form th:action="@{/login}" method="post">
        <label for="username">Username:</label>
        <input type="text" id="username" name="username" />
        <br />
        <label for="password">Password:</label>
        <input type="password" id="password" name="password" />
        <br />
        <button type="submit">Login</button>
    </form>
    <p th:if="${param.error}" style="color: red;">Invalid username or password.</p>
    <p th:if="${param.logout}" style="color: green;">You have been logged out.</p>
</body>
</html>

ধাপ ৫: প্রাইভেট পৃষ্ঠা তৈরি করুন

src/main/resources/templates/home.html ফাইল তৈরি করুন।

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Home</title>
</head>
<body>
    <h1>Welcome to Home Page</h1>
    <p>You are successfully logged in!</p>
    <a th:href="@{/logout}">Logout</a>
</body>
</html>

ধাপ ৬: Controller তৈরি করুন

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class AppController {

    @GetMapping("/login")
    public String loginPage() {
        return "login";
    }

    @GetMapping("/home")
    public String homePage() {
        return "home";
    }
}

Spring Security Form-Based Authentication এর বৈশিষ্ট্য

  1. Customizable: কাস্টম লগইন পেজ, সফল/ব্যর্থ লগইনের পরে পুনঃনির্দেশনা।
  2. Security: ডিফল্ট সিকিউরিটি ফিচার যেমন পাসওয়ার্ড এনকোডিং।
  3. Session Management: লগইন সেশনের সঠিক ব্যবস্থাপনা।
  4. Error Handling: লগইন ব্যর্থ হলে কাস্টম মেসেজ প্রদর্শন।

প্রজেক্ট রান করা এবং পরীক্ষা

  1. অ্যাপ্লিকেশনটি চালু করুন:

    mvn spring-boot:run
    
  2. ব্রাউজারে http://localhost:8080/login URL-এ যান।
  3. লগইন করার জন্য নিচের ক্রেডেনশিয়াল ব্যবহার করুন:
    • Username: user
    • Password: password

উপসংহার

Spring Security-তে Form-Based Authentication একটি ব্যবহারকারী-বান্ধব অথেন্টিকেশন পদ্ধতি। এটি ব্যবহারকারীদের সহজেই অথেন্টিকেশন প্রদান করে এবং ওয়েব অ্যাপ্লিকেশনে উচ্চ সুরক্ষা নিশ্চিত করে।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...